package socket

import (
	"fmt"
	"time"
)

var (
	DEBUG = true
)

const (
	TYPE_REQUEST  int8 = 1
	TYPE_RESPONSE int8 = 2
)

func ifcall(b bool, call func()) {
	if b {
		call()
	}
}

//调试输出
func debug(arg ...interface{}) {
	if DEBUG {
		now := time.Now().Format("[2006-01-02 15:04:05]")
		def := []interface{}{now}
		fmt.Println(append(def, arg...)...)
	}
}

//服务器端当连接时回调函数，必须返回一个数据作为连接池编号
//输入：data=client发起连接时发送的初次连接数据
type ServerConnectHandleFunc func(*Conn, []byte) []byte

//客户端连接成功时回调
//输入：data=服务器端连接成功后返回的数据
type ClientConnectHandleFunc func(*Conn, []byte)

//消息来时的回调
type MessageHandleFunc func(*Conn, []byte)

//当关闭连接时的回调
type DefHandleFunc func(*Conn)

//当发生错误时的回调
type ErrorHandleFunc func(*Conn, Error)

//自定义模拟类型
type Error interface{}

//异常处理
func try(call func(), errcall func(Error)) {
	defer func() {
		if err := recover(); err != nil {
			errcall(err)
		}
	}()
	call()
}
